<?php
/**
*功能：链接数据库 选择库  判断是否链接成功
*参数：无
*返回值：
*@return $link 链接数据库标识
*/
function con()
{
	//链接数据库  选择库  判断是否链接成功
	$link = mysqli_connect(HOST, USERNAME, PASSWORD, DB_NAME) or exit('数据库链接失败');
	
	//判断选择数据库是否成功
	if(!mysqli_select_db($link, DB_NAME)){
		
	}
	
	//设置字符集
	mysqli_set_charset($link, DB_CHARSET);
	
	return $link;
}

/**
*功能：文件上传
*参数：
*@param string 上传表单项名称
*@param array 上传类型 默认 jpg|png|gif
*@param int 上传大小  默认 1M以内
*@param string $dirup 上传目录  默认当前目录下的 uploads
*返回值：
*@return string $newname  上传文件名称
*/
function upload($bname, $dirup = './uploads', $allowtype = array('image/jpeg','image/png','image/gif'), $allowsize = 2097152)
{
	$file = $_FILES[$bname];

	//错误号 判断
	if($file['error'] > 0){
		switch($file['error']){
			case 1:
				$info = '上传文件超过 php.ini 的 upload_max_filesize 的选项';
				break;
			case 2:
				$info = '上传文件超过表单的 MAX_FILE_SIZE 大小';
				break;
			case 3:
				$info = '文件部分被上传';
				break;
			case 4:
				$info = '没有文件被上传';
				break;
			case 6:
				$info = '没有找到临时目录';
				break;
			case 7:
				$info = '没有写入的权限';
				break;
		}
		return $info;
	}

	//判断类型
	if(!in_array($file['type'], $allowtype)){
		return '上传文件类型不符合，请上传gif|png|jpg';
	}

	//大小
	if($file['size'] > $allowsize){
		return '上传文件过大，请上传1M以内的文件';
	}

	//随机文件名  目录+文件名+后缀名
	//目录
	if(!file_exists($dirup)){
		mkdir($dirup, 0777, true);
	}
	//唯一
	do{
		//文件名
		$filename = time().rand(10000,99999);
		//后缀名
		$ext = pathinfo($file['name'], PATHINFO_EXTENSION);
		//拼接路径
		$path = rtrim($dirup, '/').'/'.$filename.'.'.$ext;
	}while(file_exists($path));

	if(is_uploaded_file($file['tmp_name'])){
		if(move_uploaded_file($file['tmp_name'], $path)){
			$newname = $filename.'.'.$ext;
			return $newname;
		}else{
			return '上传失败';
		}
	}else{
		return '不是通过 HTTP POST 上传的';
	}
}

/**
*功能：图像缩放
*参数：
*@param string $srcpath 图片地址
*@param string $pre 文件名前缀 默认s_
*@param int 缩放之后图片的宽 默认300
*@param int 缩放之后图片的高 默认300
*返回值：
*@return $filename 文件名加前缀
*/
function suofang($srcpath, $sw = 300,$sh = 300,$pre = 's_')
{
	//1.创建画布
	//计算比例  300  300  要缩放的图像的宽高  1920  1080
	//用小的比例
	$srctype = strrchr($srcpath, '.');
	switch($srctype){
		case '.jpg':
			$src = imagecreatefromjpeg($srcpath);
			$func = 'imagejpeg';
			break;
		case '.png':
			$src = imagecreatefrompng($srcpath);
			$func = 'imagepng';
			break;
		case '.gif':
			$src = imagecreatefromgif($srcpath);
			$func = 'imagegif';
			break;
	}
	
	$srcinfo = getimagesize($srcpath);

	if($sw/$srcinfo[0] > $sh/$srcinfo[1]){
		$bili = $sh/$srcinfo[1];
	}else{
		$bili = $sw/$srcinfo[0];
	}

	//舍去法取整
	$sw = floor($srcinfo[0] * $bili);
	$sh = floor($srcinfo[1] * $bili);

	$dst = imagecreatetruecolor($sw, $sh);

	//3.开始绘画
	imagecopyresampled($dst, $src, 0, 0, 0, 0, $sw, $sh, $srcinfo[0], $srcinfo[1]);

	//5.将图像保存为文件
	//$filename = rand(1000,9999).time().$srctype;
	$filename = rtrim(dirname($srcpath), '/').'/'.$pre.basename($srcpath);
	
	$func($dst, $filename);

	//6.销毁资源
	imagedestroy($dst);
	imagedestroy($src);
	
	return $pre.basename($srcpath);
}
/**
*功能：验证码
*参数：
*@param int $width 验证码的宽 默认100
*@param int $height 验证码的高 默认30
*@param int $len 验证码字符个数 默认4个
*@param int $type 验证码类型  默认1代表字母  2代表数字  3代表数字字母混合
*返回值：
*@return string $str 验证码的字符
*/
function yzm($width = 100, $height = 30, $len = 4, $type = 2){
	//画验证码
	//1.创建画布
	$res = imagecreatetruecolor($width,$height);

	//2.准备颜色  rand  值越小  颜色越深  值越大  颜色越浅
	//浅颜色
	$qian = imagecolorallocate($res,rand(140,255),rand(130,200),rand(150,240));

	//深颜色
	$dark = imagecolorallocate($res,rand(0,100),rand(30,120),rand(20,130));

	//3.开始绘画
	imagefilledrectangle($res,0,0,$width,$height,$qian);

	//画字符
	//imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )
	switch($type){
		case 1:
			$str = implode('',array_rand(array_flip(array_merge(range('a','z'),range('A','Z'))),$len));
			break;
		case 2:
			$str = implode('',array_rand(array_merge(range('0','9')),$len));
			break;
		case 3:
			$str = implode('',array_rand(array_flip(array_merge(range('a','z'),range('A','Z'),range('0','9'))),$len));
	}

	for($i = 0;$i < $len;$i++){
		imagettftext($res,16,rand(-30,30),rand($i*($width/$len),(($i+1)*($width/$len)-10)),rand(12,$height),$dark,'STXINWEI.TTF',$str{$i});
	}

	//干扰元素  线  点
	/* for($i = 1;$i < 6;$i++){
		imageline($res,rand(0,$width),rand(0,$height),rand(0,$width),rand(0,$height),$dark);
	} */

	for($i = 1;$i <= 100;$i++){
		imagesetpixel($res,rand(0,$width),rand(0,$height),$dark);
	}

	//4.告诉浏览器这是一个图像
	//header('Content-type:image/jpeg');

	//5.将图像保存为文件
	imagejpeg($res,'../images/yzm.jpg');

	//6.销毁资源
	imagedestroy($res);
	
	return $str;
	
}